package fiuba.algo3.motor;

import java.util.List;

import org.w3c.dom.Node;

import fiuba.algo3.Pista;
import fiuba.algo3.XMLProcessor.nucleo.NodoXML;
import fiuba.algo3.mundo.Pais;
import fiuba.algo3.persistencia.ConstructorPista;

public abstract class ConsultorPistas
{
//	static Node[] listadoEntradas;
	static List<NodoXML> listadoEntradas;

	public static void inicializar()
	{
		String nombreArchivo = "baseDeDatos/pistas.xml";
//		listadoEntradas = MotorXML.obtenerListado(nombreArchivo);
		listadoEntradas = MotorXML.obtenerListadoXML(nombreArchivo);
//		System.err.println("Se han encontrado: " + listadoEntradas.size() + " entradas");
	}

	private static boolean coincideAtributo(NodoXML entrada, String nombreAtributo, String valor)
	{
		return entrada.obtenerValorAtributo(nombreAtributo).equals(valor);
	}
/*
	private static boolean coincideAtributo(Node entrada, String nombreAtributo, String valor)
	{
		return MotorXML.verificarAtributo(entrada, nombreAtributo, valor);
	}
*/
	private static boolean coincideEntrada(NodoXML entrada, String nombrePais, String tipoPista)
	{
		boolean coincidePais = coincideAtributo(entrada,"nombrePais",nombrePais);
		boolean coincideTipo = coincideAtributo(entrada,"tipoPista",tipoPista);

		return coincidePais && coincideTipo;
	}
/*
	private static boolean coincideEntrada(Node entrada, String nombrePais, String tipoPista)
	{
		boolean coincidePais = coincideAtributo(entrada,"nombrePais",nombrePais);
		boolean coincideTipo = coincideAtributo(entrada,"tipoPista",tipoPista);

		return coincidePais && coincideTipo;
	}
/**/
	private static NodoXML buscarPista(String nombrePais, String nombreTipo)
	{
		for (NodoXML nodo: listadoEntradas)
		{
			if (coincideEntrada(nodo, nombrePais, nombreTipo))
				return nodo.obtenerPrimogenito();
		}
		System.err.println("No se encontro la pista para el pais <" + nombrePais +">, de nivel <"+ nombreTipo +">");
		return null;
	}
/**/
/*
	private static Node buscarPista(String nombrePais, String nombreTipo)
	{
		for (Node nodo: listadoEntradas)
		{
			if (coincideEntrada(nodo, nombrePais, nombreTipo))
				return nodo.getFirstChild();
		}
		System.err.println("No se encontro la pista para el pais <" + nombrePais +">, de nivel <"+ nombreTipo +">");
		return null;
	}
/**/

	public static Pista obtenerPista(String nombrePais, String nombreTipo)
	{
		return ConstructorPista.construir(buscarPista(nombrePais,nombreTipo));
	}

	public static Pista obtenerPista(Pais pais, String nombreTipo)
	{
		return obtenerPista(pais.obtenerNombre(), nombreTipo);
	}
}
